package Vista;

import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.util.HashMap;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import juego.Juego;

public class VistaJuego {
	
	Juego juego;	
	
	int dimension, filas, columnas;
	int anchoCalle = 17;	
	int anchoJuego, cantManzanas;
	
	int vehiculoX, vehiculoY;
	int llegadaX, llegadaY;	
	
	JPanel plano, obstaculos, vehiculo, llegada;
	JLabel pozo, piquete, control, sorpresa;
	JLabel tipoVehiculo, bandera;
	PanelCircular circulo;
		
    HashMap<String, ImageIcon> imagenes;
    GridLayout grilla;
    JButton[] manzanas;    
    ImageIcon imagenLlegada;
    
    //Constructor VistaJuego
	public VistaJuego(Juego juego) {		
		this.juego = juego;					
		dimension = juego.getMapa().getDimension();
		filas = (dimension-1) / 3;
		columnas = (dimension-1) / 3;
		cantManzanas = filas * columnas;		
		while(anchoCalle * dimension < 625) { 
			anchoCalle += 2; 
		}	
		anchoJuego =  anchoCalle * dimension;
		obtenerImagenes();
		imagenLlegada = obtenerImagen("llegada.png");
		dibujarPlano();
		dibujarObjetosDeMapa(juego);
		dibujarCirculo(juego);	
		dibujarLlegada();	
		dibujarVehiculo(juego);			
	}
		
	public JPanel dibujarPlano() {			     
        plano = new JPanel();
        grilla = new GridLayout(filas, columnas, anchoCalle, anchoCalle);
        plano.setLayout(grilla);
        plano.setBorder(BorderFactory.createEmptyBorder(anchoCalle, anchoCalle, anchoCalle, anchoCalle)); 
        plano.setBackground(Color.white);
        plano.setOpaque(false);
        plano.setBounds(0, 0, anchoJuego, anchoJuego);               
        manzanas = new JButton[cantManzanas];
        for(int i = 0; i < cantManzanas; i++) {
        	manzanas[i] = new JButton(((Integer)i).toString());
        	manzanas[i].setFont(new Font(Font.DIALOG,Font.PLAIN, 8));
        	manzanas[i].setForeground(Color.black);        	
        	manzanas[i].setBackground(Color.yellow);
        	manzanas[i].setBorder(new RoundedBorder(10));
        	manzanas[i].setEnabled(false);      	
        	plano.add(manzanas[i]);
        }
        return plano;
	}

	public JPanel dibujarObjetosDeMapa(Juego juego) {		
        obstaculos = new JPanel();
        obstaculos.setOpaque(false);
        obstaculos.setBounds(0, 0, anchoJuego, anchoJuego);        
        obstaculos.setLayout(null);        
        for(int i = 0; i < dimension; i++) {
        	for(int j = 0; j < dimension; j++) {
        		if(juego.getMapa().getCeldaEnPosicion(i,j).getObjeto() != null){
        			String key = juego.getMapa().getCeldaEnPosicion(i,j).getObjeto().getClass().getName();
        			JLabel objetoMapa = new JLabel(imagenes.get(key), JLabel.CENTER); 
        			objetoMapa.setBounds(i*anchoCalle, j*anchoCalle, anchoCalle, anchoCalle);        
                    obstaculos.add(objetoMapa);
        		}        	
        	}
        }
        return obstaculos;
	}
        
	public PanelCircular dibujarCirculo(Juego juego) {
		circulo = new PanelCircular(vehiculoX, vehiculoY);
    	circulo.setOpaque(false);
        circulo.setForeground(Color.black);
        circulo.setBounds(0, 0, anchoJuego, anchoJuego);
        return circulo;
	}
        
	public JPanel dibujarLlegada() {
        llegada = new JPanel();        
        llegada.setOpaque(false);
        llegada.setLayout(null);
        llegada.setBounds(0, 0, anchoJuego, anchoJuego);
        bandera = new JLabel(imagenLlegada, JLabel.CENTER);
        bandera.setBackground(Color.white);
        bandera.setOpaque(true);
		llegadaX = juego.getLlegadaX() * anchoCalle;
		llegadaY = juego.getLlegadaY() * anchoCalle;
        bandera.setBounds(llegadaX, llegadaY, anchoCalle, anchoCalle);
        llegada.add(bandera);        
        return llegada;
	}
		
	public JPanel dibujarVehiculo(Juego juego) {
        vehiculo = new JPanel();
        vehiculo.setOpaque(false);
        vehiculo.setBounds(0, 0, anchoJuego, anchoJuego);        
		String key = juego.getVehiculo().getIdentidad().getClass().getName(); 
        tipoVehiculo = new JLabel(imagenes.get(key), JLabel.CENTER);        	     	     	
        vehiculoX = juego.getVehiculo().getPosx() * anchoCalle;
        vehiculoY = juego.getVehiculo().getPosy() * anchoCalle;
        tipoVehiculo.setBounds(vehiculoX, vehiculoY, anchoCalle, anchoCalle);
        vehiculo.add(tipoVehiculo);
        vehiculo.setLayout(null);
        return vehiculo;
	}
	
	private ImageIcon obtenerImagen(String url) {
		ImageIcon imagen = new ImageIcon(this.getClass().getResource("imagenes/" + url));
		return imagen;
	}
	
	private void obtenerImagenes() {
		imagenes = new HashMap<String, ImageIcon>();
		imagenes.put("objetoDeMapa.Pozo", obtenerImagen("pozo.png"));
		imagenes.put("objetoDeMapa.Piquete", obtenerImagen("piquete.png"));
		imagenes.put("objetoDeMapa.ControlPolicial", obtenerImagen("control.png"));
		imagenes.put("objetoDeMapa.Favorable", obtenerImagen("sorpresa.png"));
		imagenes.put("objetoDeMapa.Desfavorable", obtenerImagen("sorpresa.png"));
		imagenes.put("objetoDeMapa.CambioDeVehiculo", obtenerImagen("sorpresa.png"));
		imagenes.put("vehiculo.Identidad4por4", obtenerImagen("4x4.png"));
		imagenes.put("vehiculo.IdentidadAuto", obtenerImagen("auto.png"));
		imagenes.put("vehiculo.IdentidadMoto", obtenerImagen("moto.png"));
	}
}



